home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 123 / cdrom123.iso / essenc / extens / imzoom / Image Zoom.xpi / chrome / imagezoom.jar / content / global.js < prev    next >
Encoding:
JavaScript  |  2004-08-22  |  10.9 KB  |  373 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  
  3.     Copyright (c) 2004  Jason Adams <jason_nospam@yellowgorilla.net>
  4.  
  5.     This file is part of Image Zoom.
  6.  
  7.     Image Zoom is free software; you can redistribute it and/or modify
  8.     it under the terms of the GNU General Public License as published by
  9.     the Free Software Foundation; either version 2 of the License, or
  10.     (at your option) any later version.
  11.  
  12.     Image Zoom is distributed in the hope that it will be useful,
  13.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.     GNU General Public License for more details.
  16.  
  17.     You should have received a copy of the GNU General Public License
  18.     along with Image Zoom; if not, write to the Free Software
  19.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20.  
  21.  * ***** END LICENSE BLOCK ***** */
  22.  
  23. var version = "0.1.7";
  24. var gDefaultZoomFactor = 200;
  25. var gDefaultScrollFactor = 5;
  26. var gAllMenuItems = "context-zoom-zin,context-zoom-zout,context-zoom-zreset,context-zoom-zcustom,context-zoom-dcustom,context-zoom-fit,zoomsub-zin,zoomsub-zout,zoomsub-s1,zoomsub-zreset,zoomsub-zcustom,zoomsub-dcustom,zoomsub-s2,zoomsub-fit,zoomsub-s3,zoomsub-z400,zoomsub-z200,zoomsub-z150,zoomsub-z125,zoomsub-s4,zoomsub-z100,zoomsub-s5,zoomsub-z75,zoomsub-z50,zoomsub-z25,zoomsub-z10,context-zoomsub";
  27. var gDefaultDisplayString = "zoomsub-zin,zoomsub-zout,zoomsub-s1,zoomsub-zreset,zoomsub-zcustom,zoomsub-dcustom,zoomsub-s2,zoomsub-fit,zoomsub-s3,zoomsub-z400,zoomsub-z200,zoomsub-z150,zoomsub-z125,zoomsub-s4,zoomsub-z100,zoomsub-s5,zoomsub-z75,zoomsub-z50,zoomsub-z25,zoomsub-z10,context-zoomsub";
  28.  
  29. var imagezoomPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("imagezoom.");
  30.  
  31. var haveZoomed = false;
  32. var imageScroll;
  33.  
  34. window.addEventListener("load", initImageZoom, false);
  35. window.addEventListener("mousedown",onMouseDown,false);
  36. window.addEventListener("mouseup",onMouseUp,false);
  37. window.addEventListener("click",onClick,false);
  38.  
  39. function onClick(e){
  40.     if (e.which == 3){
  41.         if (haveZoomed){
  42.             e.preventDefault();
  43.         }
  44.     }
  45. }
  46.  
  47. function onMouseDown(e){
  48.     if (e.which == 3){
  49.         haveZoomed = false;
  50.         if (imagezoomPrefs.getBoolPref("usescroll") && (e.target.tagName == "IMG")) {
  51.             imageScroll = e.target;
  52.             window.addEventListener("DOMMouseScroll",ScrollImage,false);
  53.         }
  54.     }
  55. }
  56.  
  57. function onMouseUp(e){
  58.     if (e.which == 3){
  59.         if (haveZoomed){
  60.             e.preventDefault();
  61.         }
  62.         window.removeEventListener("DOMMouseScroll",ScrollImage,false);
  63.         imageScroll = null;
  64.     }
  65. }
  66.  
  67. function initImageZoom() {
  68.     var oldVersion = imagezoomPrefs.getCharPref("version");
  69.     if (oldVersion < version) {
  70.         imagezoomPrefs.setCharPref("version", version);
  71.         window._content.location.href = "chrome://imagezoom/content/install.html?old=" + oldVersion + "&new=" + version;
  72.     }
  73.  
  74.     if (document.getElementById("contentAreaContextMenu")){
  75.         document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", imageZoomMenu, false);
  76.     }
  77.     else if (document.getElementById("messagePaneContext")){
  78.         document.getElementById("messagePaneContext").addEventListener("popupshowing", imageZoomMenu, false);
  79.     }
  80.  
  81. }
  82.  
  83. function ScrollImage(e){
  84.     if (imageScroll){
  85.         e.preventDefault();
  86.         haveZoomed = true;
  87.         var oImage = initImage(imageScroll);
  88.         pZoomImageAbs(oImage, (oImage.zoomFactor + (e.detail * pGetScrollFactor()))/100);
  89.         zoomStatus(oImage);
  90.     }
  91. }
  92.  
  93. function imageMouseoverHandler(e)
  94. {
  95.     imageMouseOver = e.originalTarget;
  96. }
  97.  
  98. function imageMouseoutHandler(e)
  99. {
  100.     imageMouseOver = null;
  101. }
  102.  
  103. function imageZoomMenu() {
  104.     if(gContextMenu) {
  105.  
  106.         var displayString = imagezoom_getDisplayString();
  107.         var hideString = imagezoom_getHideString(displayString);
  108.  
  109.         var menuItems = pGetArrayCSV(hideString);
  110.         for (var i=0; i<menuItems.length; i++)
  111.         {
  112.             var zoomMenu = document.getElementById(menuItems[i]);
  113.             if(zoomMenu){
  114.                 zoomMenu.hidden = true;
  115.             }
  116.         }
  117.         menuItems = pGetArrayCSV(displayString);
  118.         for (var j=0; j<menuItems.length; j++)
  119.         {
  120.             zoomMenu = document.getElementById(menuItems[j]);
  121.             if(zoomMenu){
  122.                 zoomMenu.hidden = !gContextMenu.onImage;
  123.             }
  124.         }
  125.     }
  126. }
  127.  
  128.  
  129. function pGetArrayCSV(csvString)
  130. {
  131.     var newArray = new Array();
  132.     newArray = pParseCSVString(csvString, newArray);
  133.     return newArray;
  134. }
  135.  
  136. function zoomStatus(oImage)
  137. {
  138.     window.top.status = "Image Zoom " + oImage.zoomFactor + "%";
  139. }
  140.  
  141. function pParseCSVString(csvString, arrayObject)
  142. {
  143.     var indexStr = csvString.indexOf(",")
  144.     if (indexStr >= 0) {
  145.         arrayObject.push(csvString.substring(0,indexStr).replace(" ", ""));
  146.         if (csvString.substring(indexStr+1).length > 0)
  147.             arrayObject = pParseCSVString(csvString.substring(indexStr+1), arrayObject);
  148.     } else {
  149.         arrayObject.push(csvString.replace(" ", ""));
  150.     }
  151.     return arrayObject;
  152. }
  153.  
  154. function pGetZoomFactor()
  155. {
  156.     try
  157.     {
  158.         var zoomValue = imagezoomPrefs.getIntPref("zoomvalue");
  159.     }
  160.     catch(e)
  161.     {
  162.         var zoomValue = gDefaultZoomFactor;
  163.     }
  164.     return zoomValue;
  165. }
  166.  
  167. function pGetScrollFactor()
  168. {
  169.     try
  170.     {
  171.         var scrollValue = imagezoomPrefs.getIntPref("scrollvalue");
  172.     }
  173.     catch(e)
  174.     {
  175.         var scrollValue = gDefaultScrollFactor;
  176.     }
  177.     return scrollValue;
  178. }
  179.  
  180. function pZoomImageAbs(oImage, zFactor)
  181. {
  182.     if (zFactor > 0) {
  183.         if (oImage.originalWidth){
  184.             oImage.widthUnit = oImage.originalWidthUnit;
  185.             oImage.style.width = parseInt((oImage.originalWidth * zFactor) + 0.5) + oImage.widthUnit;
  186.         } else {
  187.             oImage.style.width = "";
  188.         }
  189.         if (oImage.originalHeight){
  190.             oImage.heightUnit = oImage.originalHeightUnit;
  191.             oImage.style.height = parseInt((oImage.originalHeight * zFactor) + 0.5) + oImage.heightUnit;
  192.         } else {
  193.             oImage.style.height = "";
  194.         }
  195.  
  196.         oImage.zoomFactor = parseInt((zFactor * 100)+0.5);
  197.     }
  198. }
  199.  
  200. function pSetDim(oImage, iWidth, iHeight, bMaintainProportion)
  201. {
  202.     if (bMaintainProportion) {
  203.         if (!oImage.style.height && !oImage.style.width) {
  204.             oImage.widthUnit = "px";
  205.             oImage.style.width = oImage.width + oImage.widthUnit;
  206.         }
  207.         if (oImage.style.width) {
  208.             oImage.widthUnit = "px";
  209.             oImage.style.width = parseInt(iWidth) + oImage.widthUnit;
  210.         }
  211.         if (oImage.style.height) {
  212.             oImage.heightUnit = "px";
  213.             oImage.style.height = parseInt(iHeight) + oImage.heightUnit;
  214.         }
  215.  
  216.         oImage.zoomFactor = parseInt((oImage.width / oImage.originalPxWidth)*100+0.5);
  217.  
  218.     } else {
  219.         oImage.widthUnit = "px";
  220.         oImage.style.width = parseInt(iWidth) + oImage.widthUnit;
  221.         oImage.heightUnit = "px";
  222.         oImage.style.height = parseInt(iHeight) + oImage.heightUnit;
  223.  
  224.         oImage.zoomFactor = parseInt((oImage.width / oImage.originalPxWidth)*100+0.5);
  225.     }
  226.  
  227. }
  228.  
  229. function pZoomImageRel(oImage,zoomValue)
  230. {
  231.     if (!oImage.style.height && !oImage.style.width) {
  232.         oImage.widthUnit = "px";
  233.         oImage.style.width = oImage.width + oImage.widthUnit;
  234.     }
  235.  
  236.     if (oImage.style.width) {
  237.         var oldWidth = getDimInt(oImage.style.width);
  238.         oImage.style.width = parseInt((oldWidth * zoomValue) + 0.5) + oImage.widthUnit;
  239.     }
  240.     if (oImage.style.height) {
  241.         var oldHeight = getDimInt(oImage.style.height);
  242.         oImage.style.height = parseInt((oldHeight * zoomValue) + 0.5) + oImage.heightUnit;
  243.     }
  244.  
  245.     oImage.zoomFactor = parseInt((oImage.zoomFactor * zoomValue)+0.5);
  246. }
  247.  
  248.  
  249. function pIsNumeric(sText)
  250. {
  251.     var ValidChars = "0123456789";
  252.     var IsNumber=true;
  253.     var Char;
  254.  
  255.      for (i = 0; i < sText.length && IsNumber == true; i++){
  256.         Char = sText.charAt(i);
  257.         if (ValidChars.indexOf(Char) == -1){
  258.             IsNumber = false;
  259.         }
  260.     }
  261.     return IsNumber;
  262. }
  263.  
  264. function imagezoom_getDisplayString()
  265. {
  266.     var displayString = "";
  267.  
  268.       if (imagezoomPrefs.getBoolPref("mmZoomIO"))
  269.         displayString += "context-zoom-zin,context-zoom-zout,";
  270.     if (imagezoomPrefs.getBoolPref("mmReset"))
  271.         displayString += "context-zoom-zreset,";
  272.     if (imagezoomPrefs.getBoolPref("mmCustomZoom"))
  273.         displayString += "context-zoom-zcustom,";
  274.     if (imagezoomPrefs.getBoolPref("mmCustomDim"))
  275.         displayString += "context-zoom-dcustom,";
  276.     if (imagezoomPrefs.getBoolPref("mmFitWindow"))
  277.         displayString += "context-zoom-fit,";
  278.  
  279.     if (imagezoomPrefs.getBoolPref("smZoomIO")){
  280.         displayString += "zoomsub-zin,zoomsub-zout,";
  281.         if ((imagezoomPrefs.getBoolPref("smCustomZoom")) ||
  282.             (imagezoomPrefs.getBoolPref("smCustomDim")) ||
  283.             (imagezoomPrefs.getBoolPref("smFitWindow")) ||
  284.             (imagezoomPrefs.getBoolPref("smZoomPcts")))
  285.             displayString += "zoomsub-s1,";
  286.     }
  287.     if (imagezoomPrefs.getBoolPref("smReset")){
  288.         displayString += "zoomsub-zreset,";
  289.         if (((imagezoomPrefs.getBoolPref("smCustomZoom")) ||
  290.             (imagezoomPrefs.getBoolPref("smCustomDim")) ||
  291.             (imagezoomPrefs.getBoolPref("smFitWindow")) ||
  292.             (imagezoomPrefs.getBoolPref("smZoomPcts"))) &&
  293.             !(imagezoomPrefs.getBoolPref("smZoomIO")))
  294.             displayString += "zoomsub-s1,";
  295.     }
  296.     if (imagezoomPrefs.getBoolPref("smCustomZoom")){
  297.         displayString += "zoomsub-zcustom,";
  298.         if (((imagezoomPrefs.getBoolPref("smFitWindow")) ||
  299.             (imagezoomPrefs.getBoolPref("smZoomPcts"))) &&
  300.             !(imagezoomPrefs.getBoolPref("smCustomDim")))
  301.             displayString += "zoomsub-s2,";
  302.     }
  303.     if (imagezoomPrefs.getBoolPref("smCustomDim")){
  304.         displayString += "zoomsub-dcustom,";
  305.         if ((imagezoomPrefs.getBoolPref("smFitWindow")) ||
  306.             (imagezoomPrefs.getBoolPref("smZoomPcts")))
  307.             displayString += "zoomsub-s2,";
  308.     }
  309.     if (imagezoomPrefs.getBoolPref("smFitWindow")){
  310.         displayString += "zoomsub-fit,";
  311.         if (imagezoomPrefs.getBoolPref("smZoomPcts"))
  312.             displayString += "zoomsub-s3,";
  313.     }
  314.     if (imagezoomPrefs.getBoolPref("smZoomPcts"))
  315.         displayString += "zoomsub-z400,zoomsub-z200,zoomsub-z150,zoomsub-z125,zoomsub-s4,zoomsub-z100,zoomsub-s5,zoomsub-z75,zoomsub-z50,zoomsub-z25,zoomsub-z10,";
  316.     if ((imagezoomPrefs.getBoolPref("smZoomIO")) ||
  317.         (imagezoomPrefs.getBoolPref("smReset")) ||
  318.         (imagezoomPrefs.getBoolPref("smCustomZoom")) ||
  319.         (imagezoomPrefs.getBoolPref("smCustomDim")) ||
  320.         (imagezoomPrefs.getBoolPref("smFitWindow")) ||
  321.         (imagezoomPrefs.getBoolPref("smZoomPcts")))
  322.         displayString += "context-zoomsub,";
  323.  
  324.     displayString = displayString.substring(0, displayString.length-1);
  325.  
  326.     return displayString;
  327.  
  328. }
  329.  
  330. function imagezoom_getHideString(displayString)
  331. {
  332.     var allitems = pGetArrayCSV(gAllMenuItems);
  333.     var hideString = "";
  334.     for (var i=0; i<allitems.length; i++) {
  335.         if (displayString.indexOf(allitems[i]) < 0)
  336.             hideString += allitems[i] + ",";
  337.     }
  338.  
  339.     hideString = hideString.substring(0, hideString.length-1);
  340.  
  341.     return hideString;
  342. }
  343.  
  344.  
  345. function getDimUnit(sText)
  346. {
  347.     var ValidChars = "0123456789";
  348.     var returnChar = "";
  349.     var Char;
  350.  
  351.      for (i = 0; i < sText.length; i++){
  352.         Char = sText.charAt(i);
  353.         if (ValidChars.indexOf(Char) == -1){
  354.             returnChar += Char;
  355.         }
  356.     }
  357.     return returnChar;
  358. }
  359.  
  360. function getDimInt(sText)
  361. {
  362.     var ValidChars = "0123456789";
  363.     var returnChar = "";
  364.     var Char;
  365.  
  366.      for (i = 0; i < sText.length; i++){
  367.         Char = sText.charAt(i);
  368.         if (ValidChars.indexOf(Char) >= 0){
  369.             returnChar += Char;
  370.         }
  371.     }
  372.     return returnChar;
  373. }